summaryrefslogtreecommitdiff
path: root/src/main.cpp
blob: 1365f1f4dd107fa5ab1de82b84739ffb9544be7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "config.h"
#include "number.h"
#include "packedintarray.h"
#include "lexer.h"
#include "token.h"
#include "parser.h"
#include "options.h"
#include "scriptengine.h"

#include <math.h>
#include <sys/time.h>

#include <bu/file.h>

#include <bu/sio.h>
#include <bu/streamstack.h>
using namespace Bu;

void numResult( const class Number &num )
{
    println("==> %1").arg( num );
}

void dispError( const Bu::String &sMsg )
{
    println(sMsg);
}

void dispMessage( const Bu::String &sMsg )
{
    println(sMsg);
}

int main( int argc, char *argv[] )
{
    try
    {
        Options opt( argc, argv );

        println(CLIC_VERSION_STR);
        println("Try \\exit, \\help, \\scale, and \\radix commands.");
        println("");

        Lexer lex( sioRaw );
        lex.setScale( opt.getScale() );
        lex.setRadix( opt.getRadix() );
        Parser parser( lex );

        ScriptEngine se;
        se.sigNumResult = Bu::slot(numResult);
        se.sigError = Bu::slot(dispError);
        se.sigMessage = Bu::slot(dispMessage);
        for(;;)
        {
            Expression *pExpr = parser.parse();
            se.exec( pExpr );
            delete pExpr;
        }
    }
    catch( std::exception &e )
    {
        Bu::println("Error: %1").arg( e.what() );
    }

    return 0;
}